LL_HRTIM_Init and LL_HRTIM_DeInit APIs migration ¶
The LL initialization and de-initialization functions previously available in the
stm32tnxx_ll_hrtim.c
files
within HAL1 are no longer present in HAL2.
In HAL2, all LL C files (
stm32tnxx_ll_hrtim.c) have been removed, leaving only the LL header files (
stm32tnxx_ll_hrtim.h)
that contain static inline functions.
If users need to initialize or de-initialize HRTIM using the LL layer, they have two methods:
Utilize STM32CubeMX2 Code Generation: Rely on STM32CubeMX2 to generate code with the LL layer for HRTIM initialization and de-initialization.
- Replace manually the initialization and de-initialization functionsReplace the
LL_HRTIM_InitandLL_HRIIM_DeInitfunctions manually with equivalent sequences using the static inline functions provided in the
stm32tnxx_ll_hrtim.hfile, tailored to their specific configuration and requirements.
- Replace manually the initialization and de-initialization functionsReplace the
This approach ensures that the initialization and de-initialization sequences are precisely addressing the given use case based on the LL static inline functions provided in the
stm32tnxx_ll_hrtim.h
header file.
The sequences offer improved footprint optimization compared to the previous LL initialization functions found in
stm32tnxx_ll_hrtim.c.
Related concept: Remove stm32tnxx_ll_ppp.c files
Method 1: Utilize STM32CubeMX2 Code Generation ¶
LL HRTIM configuration panel ¶
Create a new project with the STM32CubeMX2, then start the initialization and the main configuration.
LL HRTIM main features configuration ¶
Configure the HRTIM main features.
LL HRTIM channels configuration ¶
Enable and configure the chosen HRTIM channel.
LL HRTIM advanced features configuration ¶
Configure the advanced HRTIM features.
GPIO configuration ¶
Configure GPIO pins.
Note
The HRTIM GPIO configuration is applicable only if a channel is activated.
DMA configuration ¶
Configure the DMA for data reception as needed.
Note
The HRTIM DMA configuration is applicable only if a timer is activated.
NVIC configuration ¶
Configure the NVIC in case of an interrupt.
Generated HRTIM initialization sequence ¶
|
HAL1 |
HAL2 |
|
|---|---|---|
|
Initialization and configuration sequence |
static void MX_HRTIM_Init(void)
{
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
LL_RCC_SetHRTIMClockSource(LL_RCC_HRTIM_CLKSOURCE_TIM);
/* Peripheral clock enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_HRTIM);
LL_DMA_SetPeriphRequest(DMA1, LL_DMA_STREAM_0, LL_DMAMUX1_REQ_HRTIM_TIMER_A);
LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_STREAM_0, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
LL_DMA_SetStreamPriorityLevel(DMA1, LL_DMA_STREAM_0, LL_DMA_PRIORITY_LOW);
LL_DMA_SetMode(DMA1, LL_DMA_STREAM_0, LL_DMA_MODE_NORMAL);
LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_STREAM_0, LL_DMA_PERIPH_NOINCREMENT);
LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_STREAM_0, LL_DMA_MEMORY_INCREMENT);
LL_DMA_SetPeriphSize(DMA1, LL_DMA_STREAM_0, LL_DMA_PDATAALIGN_BYTE);
LL_DMA_SetMemorySize(DMA1, LL_DMA_STREAM_0, LL_DMA_MDATAALIGN_BYTE);
LL_DMA_DisableFifoMode(DMA1, LL_DMA_STREAM_0);
/* HRTIM interrupt Init */
NVIC_SetPriority(HRTIM1_TIMA_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
NVIC_EnableIRQ(HRTIM1_TIMA_IRQn);
LL_HRTIM_TIM_SetPrescaler(HRTIM1, LL_HRTIM_TIMER_A, LL_HRTIM_PRESCALERRATIO_DIV1);
LL_HRTIM_TIM_SetCounterMode(HRTIM1, LL_HRTIM_TIMER_A, LL_HRTIM_MODE_CONTINUOUS);
LL_HRTIM_TIM_SetPeriod(HRTIM1, LL_HRTIM_TIMER_A, 0xFFFD);
LL_HRTIM_TIM_SetRepetition(HRTIM1, LL_HRTIM_TIMER_A, 0x00);
LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOC);
/**HRTIM GPIO Configuration
PC6 ------> HRTIM_CHA1
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
|
HRTIM_TypeDef *mx_hrtim1_init(void)
{
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_HRTIM1);
/* HRTIM output channels configuration */
LL_HRTIM_OUT_SetOutputSetSrc(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUTPUTSET_NONE);
LL_HRTIM_OUT_SetOutputResetSrc(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUTPUTRESET_NONE);
LL_HRTIM_OUT_SetPolarity(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUT_POSITIVE_POLARITY);
LL_HRTIM_OUT_SetIdleLevel(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUT_IDLELEVEL_INACTIVE);
LL_HRTIM_OUT_SetFaultState(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUT_FAULTSTATE_ACTIVE);
/* Timer A configuration */
LL_HRTIM_TIM_SetPrescaler(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_PRESCALERRATIO_DIV1);
LL_HRTIM_TIM_SetPeriod(HRTIM1, LL_HRTIM_TIMA, 65503);
LL_HRTIM_TIM_SetRepetition(HRTIM1, LL_HRTIM_TIMA, 0);
LL_HRTIM_TIM_SetCounterMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_MODE_CONTINUOUS);
LL_HRTIM_TIM_SetCountingMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COUNTING_MODE_UP);
LL_HRTIM_TIM_SetUpdateGating(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_UPDATEGAT_INDEPENDENT);
LL_HRTIM_TIM_SetResetTrig(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_RESETTRIG_NONE);
LL_HRTIM_TIM_SetInterleavedMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_INTERLEAVED_MODE_DISABLE);
LL_HRTIM_TIM_SetBurstModeOption(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_BURSTMODE_MAINTAINCLOCK);
LL_HRTIM_OUT_SetIdleMode(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUT_IDLE_WHEN_BURST);
LL_HRTIM_OUT_SetBMEntryMode(HRTIM1, LL_HRTIM_OUTPUT_CHA1, LL_HRTIM_OUT_BM_ENTRYMODE_REGULAR);
LL_HRTIM_OUT_SetIdleMode(HRTIM1, LL_HRTIM_OUTPUT_CHA2, LL_HRTIM_OUT_IDLE_WHEN_BURST);
LL_HRTIM_OUT_SetBMEntryMode(HRTIM1, LL_HRTIM_OUTPUT_CHA2, LL_HRTIM_OUT_BM_ENTRYMODE_REGULAR);
LL_HRTIM_TIM_SetComp1Mode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_GTCMP1_EQUAL);
LL_HRTIM_TIM_SetTriggeredHalfMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_TRIGHALF_DISABLE);
LL_HRTIM_TIM_SetCompareMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_2, LL_HRTIM_COMPAREMODE_REGULAR);
LL_HRTIM_TIM_SetComp3Mode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_GTCMP3_EQUAL);
LL_HRTIM_TIM_SetCompareMode(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_4, LL_HRTIM_COMPAREMODE_REGULAR);
LL_HRTIM_TIM_SetCompareValue(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_1, 0);
LL_HRTIM_TIM_SetCompareValue(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_2, 0);
LL_HRTIM_TIM_SetCompareValue(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_3, 0);
LL_HRTIM_TIM_SetCompareValue(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_COMPARE_UNIT_4, 0);
LL_HRTIM_TIM_SetCaptureTrig(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_CAPTURE_UNIT_1, LL_HRTIM_CAPTURETRIG_NONE);
LL_HRTIM_TIM_SetCaptureTrig(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_CAPTURE_UNIT_2, LL_HRTIM_CAPTURETRIG_NONE);
LL_HRTIM_TIM_SetDACTrig(HRTIM1, LL_HRTIM_TIMA, LL_HRTIM_DACTRIG_NONE);
/* GPIO Clocks activation */
LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOC);
/**
HRTIM1 GPIO Configuration
[GPIO Pin] ------> [Signal Name]
PC6 ------> HRTIM1_CHA1
**/
/* Configure IO output speed (Low, Medium, High or Very-High) */
LL_GPIO_SetPinSpeed(GPIOC, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_LOW);
/* Configure IO output type (Push-Pull or Open-Drain) */
LL_GPIO_SetPinOutputType(GPIOC, LL_GPIO_PIN_6, LL_GPIO_OUTPUT_PUSHPULL);
/* Activate the Pull-up, Pull-down resistor, or No pull for the current IO */
LL_GPIO_SetPinPull(GPIOC, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);
/* Configure the Alternate Function in current IO */
LL_GPIO_SetAFPin_0_7(GPIOC, LL_GPIO_PIN_6, LL_GPIO_AF_4);
/* Configure IO direction mode (Input, Output, Alternate or Analog) */
LL_GPIO_SetPinMode(GPIOC, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE);
/* Enable HRTIM fault interrupt */
NVIC_SetPriority(HRTIM1_FLT_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(HRTIM1_FLT_IRQn);
return HRTIM1;
}
|
|
Deinitialization sequence |
static void MX_HRTIM1_DeInit(void)
{
LL_HRTIM_DeInit(&hHRTIM1)
}
|
void mx_hrtim1_deinit(void)
{
LL_APB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_HRTIM1);
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_HRTIM1);
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_HRTIM1);
/* ### GPIO deinitialization of HRTIM1: HRTIM1_CHA1 ########################### */
/* Configure IO in Analog Mode */
LL_GPIO_SetPinMode(GPIOC, LL_GPIO_PIN_6, LL_GPIO_MODE_ANALOG);
/* Configure the default Alternate Function in current IO */
LL_GPIO_SetAFPin_0_7(GPIOC, LL_GPIO_PIN_6, LL_GPIO_AF_0);
/* Configure the default value for IO Speed */
LL_GPIO_SetPinSpeed(GPIOC, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_LOW);
/* Configure the default value IO Output Type */
LL_GPIO_SetPinOutputType(GPIOC, LL_GPIO_PIN_6, LL_GPIO_OUTPUT_PUSHPULL);
/* Deactivate the Pull-up and Pull-down resistor for the current IO */
LL_GPIO_SetPinPull(GPIOC, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);
/* Reset the IO output state */
LL_GPIO_WriteOutputPin(GPIOC, LL_GPIO_PIN_6, LL_GPIO_PIN_RESET);
LL_GPIO_DisableHighSpeedLowVoltage(GPIOC, LL_GPIO_PIN_6);
/* Disable HRTIM fault interrupt */
NVIC_DisableIRQ(HRTIM1_FLT_IRQn);
}
|
Method 2: Replace manually the de-initialization functions ¶
LL_HRTIM_DeInit() API migration ¶
Note
For other HRTIM instances and/or series, modify the
LL_APBx_GRPx
and
LL_APBx_GRPx
defines as needed according to the target series.
|
HAL1 |
HAL2 |
|
|---|---|---|
|
Case of HRTIM |
LL_HRTIM_DeInit(&HRTIM1);
|
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_HRTIM1);
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_HRTIM1);
|